A System-On-A-Chip (SOC) is a type of integrated circuit (IC) that includes a microprocessor operating in cooperation with other circuitry. Typically, the microprocessor executes program code and interacts with one or more function-specific circuits, e.g., that do not execute program code. In some cases, the SOC is formed of two or more dies within a single IC package. In other cases, the microprocessor and other circuitry are implemented on a single die. One example of an SOC includes a microprocessor and programmable circuitry. The programmable circuitry can be implemented using a field programmable gate array (FPGA) architecture.
An FPGA typically includes an array of programmable tiles. These programmable tiles can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay lock loops (DLLs), and so forth. Each programmable tile includes both programmable interconnect circuitry and programmable logic circuitry. The programmable interconnect circuitry typically includes a large number of interconnect lines of varying lengths interconnected by programmable interconnect points (PIPs). The programmable logic circuitry implements the logic of a user design using programmable elements that can include, for example, function generators, registers, arithmetic logic, and so forth.
The programmable interconnect circuitry and programmable logic circuitry each is typically programmed by loading a stream of configuration data into internal configuration memory cells that define how the programmable elements are configured. The configuration data can be read from memory (e.g., from an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA. The functionality of an FPGA, or an FPGA portion of an SOC, is controlled by data bits provided to the IC for that purpose. The data bits, often referred to as a “bitstream,” “configuration bitstream,” or “configuration data,” can be stored in volatile memory (e.g., static memory cells, as in FPGAs and some CPLDs), in non-volatile memory (e.g., FLASH memory, as in some CPLDs), or in any other type of memory cell.
When an electronic system is implemented as a combination of individual components mounted on a circuit board, test personnel are able to probe many of the traces between the individual components. As such, various operational parameters can be measured and tested. The high level of integration found within modern SOCs, however, makes this type of measurement and testing ineffective. Often, an SOC design is so complex that complete performance validation at design time is nearly impossible. Performance of the SOC design must also be measured at runtime.